package org.osiris.client.requisitos;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.osiris.client.Privado;
import org.osiris.client.comandos.ComandoGestionRequisitos;
import org.osiris.client.model.CategoriaViewBean;
import org.osiris.client.model.ComplejidadrequisitoViewBean;
import org.osiris.client.model.EstadoProyectoViewBean;
import org.osiris.client.model.EstadorequisitoViewBean;
import org.osiris.client.model.IncertidumbreViewBean;
import org.osiris.client.model.PrioridadViewBean;
import org.osiris.client.model.ProyectoViewBean;
import org.osiris.client.model.RequisitoViewBean;
import org.osiris.client.model.RiesgoViewBean;
import org.osiris.client.model.TipoRequisitoViewBean;
import org.osiris.client.model.UsuarioViewBean;
import org.osiris.client.services.BussinessInterfaceService;
import org.osiris.client.services.BussinessInterfaceServiceAsync;
import org.osiris.client.services.ComboService;
import org.osiris.client.utils.MasterGenerator;

import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.HtmlEditor;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class AltaRequisito extends LayoutContainer {

	BussinessInterfaceServiceAsync bussinessInterfaceServiceAsync=BussinessInterfaceService.Util.getInstance();
	UsuarioViewBean usuario;
	Long prioridadAsignada=null;
	Long incertidmbreEnProyecto=null;
	Long proyectoAsignado=null;
	String situacionEnProyecto=null;
	String  puntosEstimados="0";
	ListStore <RiesgoViewBean>riesgosStore = new ListStore<RiesgoViewBean>(); 
	RequisitoViewBean seleccionado;
	VerticalPanel verticalPanel_8 = new VerticalPanel();
	ListStore<CategoriaViewBean> store=new ListStore<CategoriaViewBean> (); 
	ListStore <RequisitoViewBean> misRequisitos=new ListStore <RequisitoViewBean>();
	ListStore <RequisitoViewBean> otrosRequisitos=new ListStore <RequisitoViewBean>();
	protected static org.osiris.client.services.ComboServiceAsync combosService = GWT.create(ComboService.class);
	public AltaRequisito(RequisitoViewBean detalle,UsuarioViewBean user) {
		seleccionado=detalle;
		setSize("900", "684");
		usuario=user;
		VerticalPanel verticalPanel = new VerticalPanel();
		verticalPanel.setSpacing(5);

		TabPanel tabPanel = new TabPanel();

		TabItem tbtmAlta = new TabItem("Detalle");
		tabPanel.add(tbtmAlta);
		tbtmAlta.setSize("900", "712");

		try{
			if(detalle!=null){
				AsyncCallback<List<RiesgoViewBean>> callbackRisk=new AsyncCallback<List<RiesgoViewBean>>(){

					@Override
					public void onFailure(Throwable caught) {
						GWT.log("Error tomando riesgos:"+caught.toString());

					}

					@Override
					public void onSuccess(List<RiesgoViewBean> result) {
						riesgosStore.removeAll();
						if(result!=null){
							riesgosStore.add(result);
						}
					}

				};
				bussinessInterfaceServiceAsync.getRiesgosRequisito(detalle.getidRequisito(), callbackRisk);
			}
		}catch(Exception riskEx){}

		TabItem tbtmVersiones = new TabItem("Versiones");
		tbtmVersiones.setEnabled(false);
		/*
		VerticalPanel verticalPanel_1 = new VerticalPanel();
		verticalPanel_1.setSpacing(10);
		List<ColumnConfig> configs_1 = new ArrayList<ColumnConfig>();

		Text txtListadoDeVersiones = new Text("Listado de versiones");
		verticalPanel_1.add(txtListadoDeVersiones);

		ColumnConfig clmncnfgVerisn = new ColumnConfig("id", "Versi\u00F3n", 150);
		configs_1.add(clmncnfgVerisn);

		ColumnConfig clmncnfgFecha = new ColumnConfig("id", "Fecha", 150);
		configs_1.add(clmncnfgFecha);

		ColumnConfig clmncnfgResponsable = new ColumnConfig("id", "Responsable", 150);
		configs_1.add(clmncnfgResponsable);

		ColumnConfig clmncnfgProyecto = new ColumnConfig("id", "Proyecto", 150);
		configs_1.add(clmncnfgProyecto);

		ColumnConfig clmncnfgEstado = new ColumnConfig("id", "Estado", 150);
		configs_1.add(clmncnfgEstado);

		ColumnConfig clmncnfgComplejidad = new ColumnConfig("id", "Complejidad", 130);
		configs_1.add(clmncnfgComplejidad);

		Grid grid = new Grid(new ListStore(), new ColumnModel(configs_1));
		verticalPanel_1.add(grid);
		grid.setSize("890", "400");
		grid.setBorders(true);

		HorizontalPanel horizontalPanel_2 = new HorizontalPanel();

		Button btnConsultar = new Button("Consultar");
		horizontalPanel_2.add(btnConsultar);
		verticalPanel_1.add(horizontalPanel_2);
		tbtmVersiones.add(verticalPanel_1);
		*/
		tabPanel.add(tbtmVersiones);

		TabItem tbtmRecursos = new TabItem("Recursos");
		tbtmRecursos.setEnabled(false);
/*
		VerticalPanel verticalPanel_6 = new VerticalPanel();

		HorizontalPanel horizontalPanel_3 = new HorizontalPanel();
		horizontalPanel_3.setSpacing(5);

		LabelField lblfldNombre = new LabelField("Nombre");
		horizontalPanel_3.add(lblfldNombre);

		TextField textField_4 = new TextField();
		horizontalPanel_3.add(textField_4);
		textField_4.setWidth("100");
		textField_4.setFieldLabel("New TextField");

		LabelField lblfldTipo_1 = new LabelField("Tipo");
		horizontalPanel_3.add(lblfldTipo_1);

		ComboBox comboBox_10 = new ComboBox();
		comboBox_10.setStore(new ListStore());
		horizontalPanel_3.add(comboBox_10);
		comboBox_10.setWidth("100");
		comboBox_10.setFieldLabel("New ComboBox");

		LabelField lblfldReferencia = new LabelField("Referencia");
		horizontalPanel_3.add(lblfldReferencia);

		TextField textField_5 = new TextField();
		horizontalPanel_3.add(textField_5);
		textField_5.setFieldLabel("New TextField");

		LabelField lblfldDescripcion = new LabelField("Descripcion");
		horizontalPanel_3.add(lblfldDescripcion);

		TextField textField_6 = new TextField();
		horizontalPanel_3.add(textField_6);
		textField_6.setFieldLabel("New TextField");

		Button btnFiltrar = new Button("Filtrar");
		horizontalPanel_3.add(btnFiltrar);
		verticalPanel_6.add(horizontalPanel_3);
		horizontalPanel_3.setWidth("890");
		List<ColumnConfig> configs_2 = new ArrayList<ColumnConfig>();

		ColumnConfig clmncnfgNombre = new ColumnConfig("id", "Nombre", 150);
		configs_2.add(clmncnfgNombre);

		ColumnConfig clmncnfgTipo = new ColumnConfig("id", "Tipo", 150);
		configs_2.add(clmncnfgTipo);

		ColumnConfig clmncnfgReferencia = new ColumnConfig("id", "Referencia", 150);
		configs_2.add(clmncnfgReferencia);

		ColumnConfig clmncnfgDescripcion = new ColumnConfig("id", "Descripcion", 150);
		configs_2.add(clmncnfgDescripcion);

		ColumnConfig clmncnfgFechaAlta = new ColumnConfig("id", "Fecha alta", 150);
		configs_2.add(clmncnfgFechaAlta);

		Grid grid_1 = new Grid(new ListStore(), new ColumnModel(configs_2));
		verticalPanel_6.add(grid_1);
		grid_1.setSize("890", "400");
		grid_1.setBorders(true);

		HorizontalPanel horizontalPanel_4 = new HorizontalPanel();

		Button btnAltaDeRecurso = new Button("Alta de recurso");
		horizontalPanel_4.add(btnAltaDeRecurso);
		verticalPanel_6.add(horizontalPanel_4);
		tbtmRecursos.add(verticalPanel_6);
		*/
		tabPanel.add(tbtmRecursos);
		
		TabItem tbtmDependencias = new TabItem("Dependencias");

		VerticalPanel verticalPanel_7 = new VerticalPanel();
		verticalPanel_7.setSpacing(10);

		FieldSet fldstRequisitosRelacionados = new FieldSet();

		HorizontalPanel horizontalPanel_8 = new HorizontalPanel();
		horizontalPanel_8.setSpacing(5);

		LabelField lblfldNombre_1 = new LabelField("Nombre");
		horizontalPanel_8.add(lblfldNombre_1);

		TextField<String> nombredepfiltro = new TextField<String>();
		horizontalPanel_8.add(nombredepfiltro);
		nombredepfiltro.setWidth("90");

		LabelField lblfldReferencia_1 = new LabelField("Referencia");
		horizontalPanel_8.add(lblfldReferencia_1);

		TextField<String> referebciadepfiltro = new TextField<String>();
		horizontalPanel_8.add(referebciadepfiltro);
		referebciadepfiltro.setWidth("90");

		LabelField lblfldDescripcion_1 = new LabelField("Descripcion");
		horizontalPanel_8.add(lblfldDescripcion_1);

		TextField <String>descirpdepfiltro = new TextField<String>();
		horizontalPanel_8.add(descirpdepfiltro);

		Button btnFiltrar_1 = new Button("Filtrar");
		horizontalPanel_8.add(btnFiltrar_1);
		fldstRequisitosRelacionados.add(horizontalPanel_8);
		List<ColumnConfig> configs_4 = new ArrayList<ColumnConfig>();

		
		ColumnConfig asdasd = new ColumnConfig("idRequisito", "ID", 80);
		configs_4.add(asdasd);
		
		ColumnConfig clmncnfgNombre_1 = new ColumnConfig("nombre", "Nombre", 100);
		configs_4.add(clmncnfgNombre_1);

		ColumnConfig clmncnfgReferencia_1 = new ColumnConfig("referencia", "Referencia", 100);
		configs_4.add(clmncnfgReferencia_1);

		ColumnConfig clmncnfgTipos = new ColumnConfig("idTipoRequisito", "Tipo", 100);
		configs_4.add(clmncnfgTipos);

		ColumnConfig clmncnfgDescripcin = new ColumnConfig("descripcion", "Descripci\u00F3n", 250);
		configs_4.add(clmncnfgDescripcin);

		ColumnConfig clmncnfgEstado_1 = new ColumnConfig("idComplejidadRequisito", "Complejidad", 150);
		configs_4.add(clmncnfgEstado_1);

		final Grid <RequisitoViewBean>grid_3 = new Grid<RequisitoViewBean>(misRequisitos, new ColumnModel(configs_4));
		grid_3.setHeight("220");
		grid_3.setBorders(true);
		fldstRequisitosRelacionados.add(grid_3);

		HorizontalPanel horizontalPanel_12 = new HorizontalPanel();
		horizontalPanel_12.setSpacing(5);

		Button btnQuitar = new Button("Quitar");
		btnQuitar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				
				final RequisitoViewBean sel = grid_3.getSelectionModel().getSelectedItem();
				AsyncCallback<Boolean> callback=new AsyncCallback<Boolean>(){

					@Override
					public void onFailure(Throwable caught) {
						// TODO Auto-generated method stub
						
					}

					@Override
					public void onSuccess(Boolean result) {
						Privado.mostrarMensaje("Crear Dependencia", "Ha sido eliminada la dependencia");
						misRequisitos.remove(sel);
						otrosRequisitos.add(sel);
					}
					
				};
				bussinessInterfaceServiceAsync.eliminarDependenciaRequisito(seleccionado, sel, callback);
				
			}
		});
		horizontalPanel_12.add(btnQuitar);
		fldstRequisitosRelacionados.add(horizontalPanel_12);
		verticalPanel_7.add(fldstRequisitosRelacionados);
		fldstRequisitosRelacionados.setWidth("870");
		fldstRequisitosRelacionados.setHeading("Requisitos relacionados");
		fldstRequisitosRelacionados.setCollapsible(true);

		FieldSet fldstBuscarOtrosRequisitos = new FieldSet();

		HorizontalPanel horizontalPanel_11 = new HorizontalPanel();
		horizontalPanel_11.setSpacing(5);

		LabelField lblfldNombre_2 = new LabelField("Nombre");
		horizontalPanel_11.add(lblfldNombre_2);

		TextField <String>nombredepotrosfiltro = new TextField<String>();
		horizontalPanel_11.add(nombredepotrosfiltro);
		nombredepotrosfiltro.setWidth("90");
		

		LabelField lblfldReferencia_2 = new LabelField("Referencia");
		horizontalPanel_11.add(lblfldReferencia_2);

		TextField<String> referenciadepotrosfiltro = new TextField<String>();
		horizontalPanel_11.add(referenciadepotrosfiltro);
		referenciadepotrosfiltro.setWidth("90");
		

		LabelField lblfldDescripcion_2 = new LabelField("Descripcion");
		horizontalPanel_11.add(lblfldDescripcion_2);

		TextField<String> textField_12 = new TextField<String>();
		horizontalPanel_11.add(textField_12);

		Button btnFiltrar_2 = new Button("Filtrar");
		horizontalPanel_11.add(btnFiltrar_2);
		fldstBuscarOtrosRequisitos.add(horizontalPanel_11);
		List<ColumnConfig> configs_3 = new ArrayList<ColumnConfig>();

		
		asdasd = new ColumnConfig("idRequisito", "ID", 80);
		configs_3.add(asdasd);
		
		clmncnfgNombre_1 = new ColumnConfig("nombre", "Nombre", 100);
		configs_3.add(clmncnfgNombre_1);

		clmncnfgReferencia_1 = new ColumnConfig("referencia", "Referencia", 100);
		configs_3.add(clmncnfgReferencia_1);

		clmncnfgTipos = new ColumnConfig("idTipoRequisito", "Tipo", 100);
		configs_3.add(clmncnfgTipos);

		clmncnfgDescripcin = new ColumnConfig("descripcion", "Descripci\u00F3n", 250);
		configs_3.add(clmncnfgDescripcin);

		clmncnfgEstado_1 = new ColumnConfig("idComplejidadRequisito", "Complejidad", 150);
		configs_3.add(clmncnfgEstado_1);


		final Grid<RequisitoViewBean> grid_2 = new Grid<RequisitoViewBean>(otrosRequisitos, new ColumnModel(configs_3));
		grid_2.setHeight("200");
		fldstBuscarOtrosRequisitos.add(grid_2);
		grid_2.setBorders(true);

		HorizontalPanel horizontalPanel_13 = new HorizontalPanel();
		horizontalPanel_13.setSpacing(5);

		Button btnAgregar = new Button("Agregar");
		btnAgregar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				final RequisitoViewBean sel = grid_2.getSelectionModel().getSelectedItem();
				AsyncCallback<Boolean> callback=new AsyncCallback<Boolean>(){

					@Override
					public void onFailure(Throwable caught) {
						// TODO Auto-generated method stub
						
					}

					@Override
					public void onSuccess(Boolean result) {
						Privado.mostrarMensaje("Crear Dependencia", "Ha sido creada la nueva dependencia");
						
						misRequisitos.add(sel);
						otrosRequisitos.remove(sel);
					}
					
				};
				bussinessInterfaceServiceAsync.crearDependenciaRequisito(seleccionado, sel, callback);
				
			}
		});
		horizontalPanel_13.add(btnAgregar);
		fldstBuscarOtrosRequisitos.add(horizontalPanel_13);
		verticalPanel_7.add(fldstBuscarOtrosRequisitos);
		fldstBuscarOtrosRequisitos.setHeading("Buscar otros requisitos");
		fldstBuscarOtrosRequisitos.setCollapsible(true);
		tbtmDependencias.add(verticalPanel_7);
		tabPanel.add(tbtmDependencias);

		TabItem tbtmRiesgos = new TabItem("Riesgos");
		if(detalle==null){
			tbtmRiesgos.setEnabled(false);
		}
		tbtmRiesgos.setHeight("523px");




		this.crearRiesgosAsociados();

		this.crearPnaelRiesgos();

		tbtmRiesgos.add(verticalPanel_8);
		tabPanel.add(tbtmRiesgos);
		add(tabPanel);
		tabPanel.setSize("900", "750");

		HorizontalPanel horizontalPanel_5 = new HorizontalPanel();

		LabelField lblfldOrigen = new LabelField("Origen");
		horizontalPanel_5.add(lblfldOrigen);


		final TextArea origen = new TextArea();
		if(detalle!=null){
			origen.setValue(detalle.getorigen());
			origen.setEnabled(false);
		}
		horizontalPanel_5.add(origen);
		origen.setWidth("800");
		origen.setFieldLabel("New TextArea");
		verticalPanel.add(horizontalPanel_5);
		horizontalPanel_5.setSpacing(4);
		horizontalPanel_5.setWidth("890");

		HorizontalPanel horizontalPanel_18 = new HorizontalPanel();
		horizontalPanel_18.setSpacing(4);

		LabelField lblfldResumen = new LabelField("Resumen");
		horizontalPanel_18.add(lblfldResumen);

		final TextArea resumen = new TextArea();
		if(detalle!=null){
			resumen.setValue(detalle.getdescripcion());
			resumen.setEnabled(false);
			AsyncCallback<List<RequisitoViewBean>> callbackBuscarDependen=new AsyncCallback<List<RequisitoViewBean>>(){

				@Override
				public void onFailure(Throwable caught) {
					GWT.log("Fallo:"+caught);
					
				}

				@Override
				public void onSuccess(List<RequisitoViewBean> result) {
				if(result!=null){
					misRequisitos.removeAll();
					misRequisitos.add(result);
				}
					
				}
				
			};
			AsyncCallback<List<RequisitoViewBean>> callbackBuscarDependenOtros=new AsyncCallback<List<RequisitoViewBean>>(){

				@Override
				public void onFailure(Throwable caught) {
					GWT.log("Fallo:"+caught);
					
				}

				@Override
				public void onSuccess(List<RequisitoViewBean> result) {
				if(result!=null){
					otrosRequisitos.removeAll();
					otrosRequisitos.add(result);
				}
					
				}
				
			};
			this.bussinessInterfaceServiceAsync.buscarRequisitos(
					null, null, null, 
					null, null, null, null, 
					null, null, null, null, null, null, null, null, null,
					detalle.getidRequisito(),true, callbackBuscarDependen);
		
			this.bussinessInterfaceServiceAsync.buscarRequisitos(
					null, null, null, 
					null, null, null, null, 
					null, null, null, null, null, null, null, null, null,
					detalle.getidRequisito(),false, callbackBuscarDependenOtros);
		
		
		
		
		}
		horizontalPanel_18.add(resumen);
		resumen.setWidth("780");
		resumen.setFieldLabel("New TextArea");
		verticalPanel.add(horizontalPanel_18);
		horizontalPanel_18.setWidth("890");

		HorizontalPanel horizontalPanel_6 = new HorizontalPanel();

		LabelField lblfldDetalle = new LabelField("Detalle");
		horizontalPanel_6.add(lblfldDetalle);
		verticalPanel.add(horizontalPanel_6);
		horizontalPanel_6.setSpacing(4);
		horizontalPanel_6.setWidth("890");

		HorizontalPanel horizontalPanel_9 = new HorizontalPanel();
		horizontalPanel_9.setSpacing(4);

		final HtmlEditor htmlEditor = new HtmlEditor();
		if(detalle!=null){
			htmlEditor.setValue(detalle.getdetallerequisito());
			htmlEditor.setEnabled(false);
		}
		horizontalPanel_9.add(htmlEditor);
		htmlEditor.setSize("880", "150");
		htmlEditor.setFieldLabel("New HtmlEditor");
		verticalPanel.add(horizontalPanel_9);
		horizontalPanel_9.setWidth("890");

		HorizontalPanel horizontalPanel = new HorizontalPanel();

		FieldSet fldstProyecto = new FieldSet();
		if(detalle!=null){
			fldstProyecto.setExpanded(false);
			fldstProyecto.setEnabled(false);
		}
		HorizontalPanel horizontalPanel_1 = new HorizontalPanel();

		LabelField lblfldProyecto = new LabelField("Proyecto");
		horizontalPanel_1.add(lblfldProyecto);

		final ComboBox<ProyectoViewBean> proyecto = MasterGenerator.getCombosProyectos();

		horizontalPanel_1.add(proyecto);
		if(detalle!=null){

			proyecto.setEnabled(false);
		}


		LabelField lblfldPrioridad = new LabelField("Prioridad");
		horizontalPanel_1.add(lblfldPrioridad);

		final ComboBox<PrioridadViewBean> prioridad = MasterGenerator.getComboPrioridad();

		horizontalPanel_1.add(prioridad);
		if(detalle!=null){


			prioridad.setEnabled(false);
		}

		LabelField lblfldIncertidumbre = new LabelField("Incertidumbre");
		horizontalPanel_1.add(lblfldIncertidumbre);


		final ComboBox<IncertidumbreViewBean> incertidumbre = MasterGenerator.getComboIncertidumbre();

		if(detalle!=null){


			incertidumbre.setEnabled(false);
		}

		horizontalPanel_1.add(incertidumbre);
		incertidumbre.setWidth("150");


		LabelField lblfldSituacion = new LabelField("Situacion");
		horizontalPanel_1.add(lblfldSituacion);

		final ComboBox<EstadoProyectoViewBean> situacion = MasterGenerator.getCombosEstadoRequisitoEnProyecto();
		horizontalPanel_1.add(situacion);

		if(detalle!=null){
			situacion.setEnabled(false);
		}

		fldstProyecto.add(horizontalPanel_1);
		horizontalPanel.add(fldstProyecto);
		fldstProyecto.setHeading("Proyecto");
		fldstProyecto.setCollapsible(true);
		verticalPanel.add(horizontalPanel);


		HorizontalPanel horizontalPanel_10 = new HorizontalPanel();
		horizontalPanel_10.setSpacing(10);

		VerticalPanel verticalPanel_2 = new VerticalPanel();
		verticalPanel_2.setSpacing(7);

		LabelField lblfldReferencencia = new LabelField("Referencencia");
		verticalPanel_2.add(lblfldReferencencia);

		LabelField lblfldCategoria = new LabelField("Categoria");
		verticalPanel_2.add(lblfldCategoria);

		LabelField lblfldEstado = new LabelField("Estado");
		verticalPanel_2.add(lblfldEstado);

		LabelField lblfldPuntosFuncin = new LabelField("Puntos funci\u00F3n");
		verticalPanel_2.add(lblfldPuntosFuncin);

		LabelField lblfldUsuarioAlta = new LabelField("Usuario Alta");
		verticalPanel_2.add(lblfldUsuarioAlta);

		LabelField lblfldUsuarioResponsable = new LabelField("Usuario Responsable");
		verticalPanel_2.add(lblfldUsuarioResponsable);
		horizontalPanel_10.add(verticalPanel_2);
		verticalPanel_2.setWidth("150");

		VerticalPanel verticalPanel_3 = new VerticalPanel();
		verticalPanel_3.setSpacing(3);

		final TextField<String> referencia = new TextField<String>();
		if(detalle!=null){

			/*List<PrioridadViewBean> selection=new ArrayList<PrioridadViewBean> ();
			selection.add(detalle.getprioridad());
			prioridad.setSelection(selection);
			prioridad.setEnabled(false);*/
			referencia.setValue(detalle.getreferencia());

		}
		verticalPanel_3.add(referencia);


		final ComboBox<CategoriaViewBean> categorias = MasterGenerator.getComboCategorias();

		if(detalle!=null){
			try{
			categorias.setValue(detalle.getsubcategoria().getpadre());
			}catch(Exception me){
				categorias.setValue(categorias.getStore().getModels().get(0));
			}
			categorias.setEnabled(false);
		}
		
		
		SelectionChangedListener<CategoriaViewBean> listener2=new SelectionChangedListener<CategoriaViewBean>(){

			@Override
			public void selectionChanged(
					SelectionChangedEvent<CategoriaViewBean> se) {
				if(se!=null &&se.getSelectedItem()!=null){
					AsyncCallback<List<CategoriaViewBean>> callback3=new AsyncCallback<List<CategoriaViewBean>> (){

						@Override
						public void onFailure(Throwable caught) {
							// TODO Auto-generated method stub

						}

						@Override
						public void onSuccess(List<CategoriaViewBean> result) {
							store.removeAll();
							if(result!=null){
								GWT.log("add "+result.size()+" resultados");
								store.add(result);
							}

						}

					};
					combosService.getSubCategorias(se.getSelectedItem(), callback3);
				}

			}

		};

		categorias.addSelectionChangedListener(listener2);
		verticalPanel_3.add(categorias);

		final ComboBox<EstadorequisitoViewBean> estado = MasterGenerator.getEstadosCombo();
		verticalPanel_3.add(estado);
		if(detalle!=null){

			List<EstadorequisitoViewBean> selection=new ArrayList<EstadorequisitoViewBean> ();
			selection.add(detalle.getidEstadoRequisito());
			estado.setSelection(selection);
			estado.setEnabled(false);


		}



		final TextField<String> puntosFuncion = new TextField<String>();
		if(detalle!=null){
			puntosFuncion.setValue(detalle.getpuntosFuncion().toString());
			puntosFuncion.setEnabled(false);

		}
		verticalPanel_3.add(puntosFuncion);
		horizontalPanel_10.add(verticalPanel_3);
		verticalPanel_3.setWidth("270");

		TextField<String> usuarioAlta = new TextField<String>();
		if(detalle==null){
			try{
				usuarioAlta.setValue(usuario.getnombre()+" "+usuario.getprimerApellido());
			}catch(Exception me){
				GWT.log("User:"+usuario);
				me.printStackTrace();
			}
			usuarioAlta.setEnabled(false);
		}else {
			usuarioAlta.setValue(detalle.getautor());
		}
		verticalPanel_3.add(usuarioAlta);

		final ComboBox<UsuarioViewBean> usuarioResp = MasterGenerator.getComboUsuarios();
		verticalPanel_3.add(usuarioResp);
		if(detalle!=null){

			List<UsuarioViewBean> selection=new ArrayList<UsuarioViewBean> ();
			selection.add(detalle.getresponsable());
			usuarioResp.setSelection(selection);
			usuarioResp.setEnabled(false);


		}


		VerticalPanel verticalPanel_4 = new VerticalPanel();
		verticalPanel_4.setSpacing(7);

		LabelField lblfldTipo = new LabelField("Tipo");
		verticalPanel_4.add(lblfldTipo);

		LabelField lblfldSubcategoria = new LabelField("Subcategoria");
		verticalPanel_4.add(lblfldSubcategoria);

		LabelField lblfldComplejidad = new LabelField("Complejidad");
		verticalPanel_4.add(lblfldComplejidad);

		LabelField lblfldFechaElicitacin = new LabelField("Fecha alta");
		verticalPanel_4.add(lblfldFechaElicitacin);

		LabelField lblfldVersin = new LabelField("Versi\u00F3n");
		verticalPanel_4.add(lblfldVersin);

		LabelField lblfldUltimoCambio = new LabelField("Nombre");
		verticalPanel_4.add(lblfldUltimoCambio);
		horizontalPanel_10.add(verticalPanel_4);
		verticalPanel_4.setWidth("150");

		VerticalPanel verticalPanel_5 = new VerticalPanel();
		verticalPanel_5.setSpacing(3);


		final ComboBox<TipoRequisitoViewBean> tipo = MasterGenerator.getComboTipos();
		verticalPanel_5.add(tipo);
		if(detalle!=null){

			List<TipoRequisitoViewBean> selection=new ArrayList<TipoRequisitoViewBean> ();
			selection.add(detalle.getidTipoRequisito());
			tipo.setSelection(selection);
			tipo.setEnabled(false);


		}

		final ComboBox<CategoriaViewBean> subcategoria = MasterGenerator.getComboSubCategorias(null);

		subcategoria.setStore(store);
		verticalPanel_5.add(subcategoria);
		if(detalle!=null){

			List<CategoriaViewBean> selection=new ArrayList<CategoriaViewBean> ();
			selection.add(detalle.getsubcategoria());
			subcategoria.setSelection(selection);
			subcategoria.setEnabled(false);


		}


		final ComboBox<ComplejidadrequisitoViewBean> complejidad = MasterGenerator.getComplejidadCombo();

		verticalPanel_5.add(complejidad);
		if(detalle!=null){

			List<ComplejidadrequisitoViewBean> selection=new ArrayList<ComplejidadrequisitoViewBean> ();
			selection.add(detalle.getidComplejidadRequisito());
			complejidad.setSelection(selection);
			complejidad.setEnabled(false);


		}


		DateField fechaalta = new DateField();
		if(detalle==null){
			fechaalta.setValue(new Date());
			fechaalta.setEnabled(false);
		}else {
			fechaalta.setValue(detalle.getfechaalta());
		}
		verticalPanel_5.add(fechaalta);

		final TextField<String> version = new TextField<String>();
		if(detalle!=null){
			if(detalle.getversion()!=null){
				version.setValue(detalle.getversion());
			}else {
				version.setValue("1.0	");
			}
		}
		verticalPanel_5.add(version);


		final TextField<String> nombre = new TextField<String>();
		if(detalle!=null){
			nombre.setValue(detalle.getnombre());
		}
		verticalPanel_5.add(nombre);
		horizontalPanel_10.add(verticalPanel_5);
		verticalPanel_5.setWidth("270");
		tbtmAlta.add(horizontalPanel_10);

		HorizontalPanel horizontalPanel_7 = new HorizontalPanel();

		Button btnCrear = new Button("Guardar");
		horizontalPanel_7.add(btnCrear);

		SelectionListener<ButtonEvent> listener=new SelectionListener<ButtonEvent>(){
			@Override
			public void componentSelected(ButtonEvent ce) {
				try{
					try{
						prioridadAsignada=prioridad.getValue().getid();
					}catch(Exception me){}

					try{
						incertidmbreEnProyecto=incertidumbre.getValue().getid();
					}catch(Exception me){}
					try{
						proyectoAsignado=proyecto.getValue().getidProyecto();
					}catch(Exception me){}
					try{
						situacionEnProyecto=situacion.getValue().getnombre();
					}catch(Exception me){}
					final AsyncCallback<RequisitoViewBean> callback=new AsyncCallback<RequisitoViewBean>(){

						@Override
						public void onFailure(Throwable caught) {
							Privado.mostrarMensaje("Alta de requisito", "Requisito no creado, es produjo un error:"+caught.toString());

						}

						@Override
						public void onSuccess(RequisitoViewBean result) {
							Privado.mostrarMensaje("Alta de requisito", "Requisito creado:"+result);

						}};

						try{
							puntosEstimados=puntosFuncion.getValue().toString();
						}catch(Exception me){
							//me.printStackTrace();
						}
						Privado.mostrarMensajeConfirmacion("Alta de requisito", "Esta seguro", new Command(){

							@Override
							public void execute() {
								Long responsable = null;
								try{
									responsable=usuarioResp.getSelection().get(0).getidUsuario();
								}catch(Exception em){
									//em.printStackTrace();
								}
								String vs="0";
								try{
									vs=version.getValue().toString();
								}catch(Exception em){
									//em.printStackTrace();
								}
								Long es = null;
								try{
									es=estado.getSelection().get(0).getid();
								}catch(Exception em){
									//em.printStackTrace();
								}
								GWT.log("vs:"+vs);
								GWT.log("pf:"+puntosEstimados);
								Long cat=null; 
								try{
									cat=categorias.getValue().getid();
								}catch(Exception em){
									//em.printStackTrace();
								}
								bussinessInterfaceServiceAsync.crearRequisito(
										referencia.getValue(), 
										cat, 
										es, 
										puntosEstimados, 
										usuario.getidUsuario(), 
										responsable, 
										tipo.getSelection().get(0).getid(), 
										subcategoria.getSelection().get(0).getid(), 
										complejidad.getSelection().get(0).getid(), 
										nombre.getValue(), 
										vs,
										origen.getValue(), 
										htmlEditor.getValue(), 
										proyectoAsignado, 
										prioridadAsignada, 
										incertidmbreEnProyecto, 
										situacionEnProyecto, 
										resumen.getValue(),
										callback);

							}

						});
				}catch(Exception me){
					Privado.mostrarMensaje("Alta de requisito", "Se produjo un error en el alta");
					//me.printStackTrace();
				}
			}


		};
		btnCrear.addSelectionListener(listener);

		Button btnCancear = new Button("Volver");
		btnCancear.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				Command bus=new ComandoGestionRequisitos(usuario);
				bus.execute();
			}
		});
		horizontalPanel_7.add(btnCancear);

		Button btnModificar = new Button("Modificar");
		horizontalPanel_7.add(btnModificar);
		verticalPanel.add(horizontalPanel_7);
		horizontalPanel_7.setSpacing(4);
		horizontalPanel_7.setWidth("450");
		tbtmAlta.add(verticalPanel);
		verticalPanel.setSize("900", "550");
	}
	public void crearPnaelRiesgos(){
		FieldSet fldstRiesgosDisponibles = new FieldSet();

		HorizontalPanel horizontalPanel_15 = new HorizontalPanel();
		horizontalPanel_15.setSpacing(5);

		LabelField lblfldNombre_4 = new LabelField("Nombre");
		horizontalPanel_15.add(lblfldNombre_4);

		final TextField<String> nombre = new TextField<String>();
		horizontalPanel_15.add(nombre);
		nombre.setWidth("300");
		fldstRiesgosDisponibles.add(horizontalPanel_15);


		HorizontalPanel horizontalPanel_1 = new HorizontalPanel();
		horizontalPanel_1.setSpacing(5);

		LabelField lblfldDescripcin_1 = new LabelField("Descripci\u00F3n");
		horizontalPanel_1.add(lblfldDescripcin_1);
		fldstRiesgosDisponibles.add(horizontalPanel_1);

		HorizontalPanel horizontalPanel = new HorizontalPanel();
		horizontalPanel.setSpacing(5);

		final TextArea descripcion = new TextArea();
		horizontalPanel.add(descripcion);
		descripcion.setWidth("800");
		fldstRiesgosDisponibles.add(horizontalPanel);

		HorizontalPanel horizontalPanel_17 = new HorizontalPanel();
		horizontalPanel_17.setSpacing(5);

		LabelField lblfldImacpto = new LabelField("Impacto");
		horizontalPanel_17.add(lblfldImacpto);

		final TextField<String> impacto = new TextField<String>();
		horizontalPanel_17.add(impacto);

		LabelField lblfldProbabilidad = new LabelField("Probabilidad");
		horizontalPanel_17.add(lblfldProbabilidad);

		final TextField<String> probabilidad = new TextField<String>();
		horizontalPanel_17.add(probabilidad);

		Button btnAgregar_1 = new Button("Agregar");
		SelectionListener<ButtonEvent> listener=new SelectionListener<ButtonEvent>(){

			@Override
			public void componentSelected(ButtonEvent ce) {
				AsyncCallback<RiesgoViewBean> callback=new AsyncCallback<RiesgoViewBean> (){

					@Override
					public void onFailure(Throwable caught) {
						GWT.log("error dando de alta riesgo:"+caught.toString());

					}

					@Override
					public void onSuccess(RiesgoViewBean result) {
						if(result!=null){
							Privado.mostrarMensaje("Alta de riesgo", "El rieso ha sido creado correctamente");
							riesgosStore.add(result);
							descripcion.clear();
							nombre.clear();
							impacto.clear();
							probabilidad.clear();
						}
						GWT.log("resul:"+result);

					}

				};
				bussinessInterfaceServiceAsync.asociarRiesgoARequisito(seleccionado.getidRequisito(), descripcion.getValue(), 
						nombre.getValue(), usuario.getidUsuario(), impacto.getValue(), probabilidad.getValue(), callback);

			}

		};
		btnAgregar_1.addSelectionListener(listener);

		horizontalPanel_17.add(btnAgregar_1);
		fldstRiesgosDisponibles.add(horizontalPanel_17);
		verticalPanel_8.add(fldstRiesgosDisponibles);
		fldstRiesgosDisponibles.setHeading("Crear Nuevo Riesgo");
		fldstRiesgosDisponibles.setCollapsible(true);
	}
	public void crearRiesgosAsociados(){
		FieldSet fldstRiesgosAsociados = new FieldSet();
		List<ColumnConfig> configs_5 = new ArrayList<ColumnConfig>();

		ColumnConfig clmncnfgNombre_4 = new ColumnConfig("nombre", "Nombre", 200);
		configs_5.add(clmncnfgNombre_4);

		ColumnConfig clmncnfgDescripcin_3 = new ColumnConfig("descripcion", "Descripci\u00F3n", 200);
		configs_5.add(clmncnfgDescripcin_3);

		ColumnConfig clmncnfgImpacto = new ColumnConfig("impacto", "Impacto", 90);
		configs_5.add(clmncnfgImpacto);

		ColumnConfig clmncnfgProbabilidad = new ColumnConfig("probabilidad", "Probabilidad", 90);
		configs_5.add(clmncnfgProbabilidad);

		ColumnConfig clmncnfgFechaDeAlta = new ColumnConfig("fechaalta", "Fecha de alta", 80);
		configs_5.add(clmncnfgFechaDeAlta);

		ColumnConfig clmncnfgUsuarioAlta = new ColumnConfig("usuario", "Usuario Alta", 90);
		configs_5.add(clmncnfgUsuarioAlta);
		
		ColumnConfig clmncnfgExposicion = new ColumnConfig("exposicion", "Exposicion", 150);
		configs_5.add(clmncnfgExposicion);

		final Grid <RiesgoViewBean>grid_5 = new Grid<RiesgoViewBean>(this.riesgosStore, new ColumnModel(configs_5));
		grid_5.setHeight("210");
		fldstRiesgosAsociados.add(grid_5);
		grid_5.setBorders(true);

		HorizontalPanel horizontalPanel_14 = new HorizontalPanel();
		horizontalPanel_14.setSpacing(5);

		Button btnQuitar_1 = new Button("Quitar");
		SelectionListener<ButtonEvent> listener=new SelectionListener<ButtonEvent>(){

			@Override
			public void componentSelected(ButtonEvent ce) {
				final RiesgoViewBean ri = grid_5.getSelectionModel().getSelectedItem();
				AsyncCallback<Boolean> callback=new AsyncCallback<Boolean>(){

					@Override
					public void onFailure(Throwable caught) {
						// TODO Auto-generated method stub

					}

					@Override
					public void onSuccess(Boolean result) {
						riesgosStore.remove(ri);
						Privado.mostrarMensaje("Detalle Requisito", "El riesgo ha sido eliminado");

					}};
					bussinessInterfaceServiceAsync.desasociarRiesgoARequisito(seleccionado.getidRequisito(), ri.getid(), callback);

			}

		};
		btnQuitar_1.addSelectionListener(listener);
		horizontalPanel_14.add(btnQuitar_1);
		fldstRiesgosAsociados.add(horizontalPanel_14);
		fldstRiesgosAsociados.setWidth("870");
		fldstRiesgosAsociados.setHeading("Riesgos asociados");
		fldstRiesgosAsociados.setCollapsible(true);
		verticalPanel_8.add(fldstRiesgosAsociados);
	}

}
